package chapter11;

import redis.clients.jedis.Jedis;

/**
 * OverSellCheck 类用于检查是否可以购买商品，以防止过量销售
 */
public class OverSellCheck {

    /**
     * 检查用户是否可以购买商品
     *
     * @param jedis    Redis 客户端实例，用于与 Redis 数据库交互
     * @param goodsKey 商品键值
     * @return boolean 表示是否可以购买商品，true 表示可以购买，false 表示不可以购买
     */
    public static boolean canBuy(Jedis jedis, String goodsKey) {
        // Lua 脚本用于原子操作，以防止并发条件下的超卖现象
        String lua = "local left = tonumber(redis.call('get',KEYS[1]))\n" +
                "if(left<=0) then\n" +
                "\treturn 0\n" +
                "else\n" +
                "  redis.call('decrby',KEYS[1],1)\n" +
                "\treturn left\n" +
                "end";
        // 执行 Lua 脚本，判断商品是否还可以购买
        String result = jedis.eval(lua, 1, goodsKey).toString();
        // 如果返回结果不为 "0"，则表示还可以购买商品
        return !result.equals("0");
    }
}

